package xdu.lz.stage2_design_pattern.chapter6_immutable_pattern.immutable_pattern;

/**
1不可变对象设计模式:可以实现在多线程下，无锁进行并行处理，提升性能
    不管多个线程访问永远不会出现安全问题，因为永远没有机会修改数据
2不可变对象一定是线程安全的，可变对象不一定不安全[如StringBuffer，大量锁]。
    如：Java2EE中：
        servlet 不安全：单例
        struts 1.x 不安全：单例
        struts 2.x  安全：多例【类似SpringMVC】

 3不可变对象的特点
    1)不能有set方法
    2)所有成员都是final和private的
    3）不能被继承，防止被重写，用final修饰 不可变对象 类

 TODO  分析String类：注意String是不可变对象(Integer也是)，所有的修改方法最后都是返回一个new String。

 StringBuffer里面有大量的synchronized，线程安全，非不可变
 String里面方法没有synchronized，只有方法里面才有，不可变

 */


public class ImmutableClient {

    public static void main(String[] args) {
        Person person = new Person("1", "2");
        //不管多个线程访问永远不会出现安全问题，因为永远没有机会修改数据
        for (int i = 0; i < 50; i++) {
            new UserPersonThread(person).start();
        }
    }
}
